<!DOCTYPE html>
<html lang="en-US">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>gcc选项命令 | whoway</title>
    <meta name="description" content="Personal Blog Website">
    <link rel="icon" href="/images/photo.jpg">
  <link rel="manifest" href="/images/photo.jpg">
  <link rel="apple-touch-icon" href="/images/photo.jpg">
  <meta http-quiv="pragma" cotent="no-cache">
  <meta http-quiv="pragma" cotent="no-cache,must-revalidate">
  <meta http-quiv="expires" cotent="0">
    
    <link rel="preload" href="/assets/css/0.styles.0dbae9ec.css" as="style"><link rel="preload" href="/assets/js/app.c70e21ad.js" as="script"><link rel="preload" href="/assets/js/111.f985889a.js" as="script"><link rel="prefetch" href="/assets/js/10.15222a53.js"><link rel="prefetch" href="/assets/js/100.7e0e5a86.js"><link rel="prefetch" href="/assets/js/101.efd59f25.js"><link rel="prefetch" href="/assets/js/102.dfbdc06c.js"><link rel="prefetch" href="/assets/js/103.d3ab2109.js"><link rel="prefetch" href="/assets/js/104.117957ef.js"><link rel="prefetch" href="/assets/js/105.046e8ff3.js"><link rel="prefetch" href="/assets/js/106.aebdc17d.js"><link rel="prefetch" href="/assets/js/107.248733c2.js"><link rel="prefetch" href="/assets/js/108.a2fecadc.js"><link rel="prefetch" href="/assets/js/109.35196857.js"><link rel="prefetch" href="/assets/js/11.770642f2.js"><link rel="prefetch" href="/assets/js/110.cf3d973c.js"><link rel="prefetch" href="/assets/js/112.ad614f41.js"><link rel="prefetch" href="/assets/js/113.f666653c.js"><link rel="prefetch" href="/assets/js/114.c6c3f384.js"><link rel="prefetch" href="/assets/js/115.e51d3c2f.js"><link rel="prefetch" href="/assets/js/116.4f4b39f5.js"><link rel="prefetch" href="/assets/js/117.99352e11.js"><link rel="prefetch" href="/assets/js/118.c6ae6572.js"><link rel="prefetch" href="/assets/js/119.4ccbe778.js"><link rel="prefetch" href="/assets/js/12.042a92ff.js"><link rel="prefetch" href="/assets/js/120.edda1c4f.js"><link rel="prefetch" href="/assets/js/121.30a638ed.js"><link rel="prefetch" href="/assets/js/122.6efcefb1.js"><link rel="prefetch" href="/assets/js/123.91e6665b.js"><link rel="prefetch" href="/assets/js/124.f27e3d7e.js"><link rel="prefetch" href="/assets/js/125.c75712d5.js"><link rel="prefetch" href="/assets/js/126.ed756cce.js"><link rel="prefetch" href="/assets/js/127.2f06c74c.js"><link rel="prefetch" href="/assets/js/128.d5f6f30e.js"><link rel="prefetch" href="/assets/js/129.508b7eed.js"><link rel="prefetch" href="/assets/js/13.b5280c37.js"><link rel="prefetch" href="/assets/js/130.dc05f9aa.js"><link rel="prefetch" href="/assets/js/131.e0ba69b1.js"><link rel="prefetch" href="/assets/js/132.d79bcaa4.js"><link rel="prefetch" href="/assets/js/133.34acc01a.js"><link rel="prefetch" href="/assets/js/134.dabf64d5.js"><link rel="prefetch" href="/assets/js/135.ad90c915.js"><link rel="prefetch" href="/assets/js/136.dbb0074f.js"><link rel="prefetch" href="/assets/js/137.284ad365.js"><link rel="prefetch" href="/assets/js/138.a4b6856f.js"><link rel="prefetch" href="/assets/js/139.c9c1e20f.js"><link rel="prefetch" href="/assets/js/14.df02ba38.js"><link rel="prefetch" href="/assets/js/140.8b0a9269.js"><link rel="prefetch" href="/assets/js/141.9c7759c5.js"><link rel="prefetch" href="/assets/js/142.a4201a82.js"><link rel="prefetch" href="/assets/js/143.d7da6e8c.js"><link rel="prefetch" href="/assets/js/144.5e48e65d.js"><link rel="prefetch" href="/assets/js/145.a0e2633c.js"><link rel="prefetch" href="/assets/js/146.3c775f9b.js"><link rel="prefetch" href="/assets/js/147.22add89a.js"><link rel="prefetch" href="/assets/js/148.cfde1009.js"><link rel="prefetch" href="/assets/js/149.ffc835b5.js"><link rel="prefetch" href="/assets/js/15.fbdfc4ee.js"><link rel="prefetch" href="/assets/js/150.406c4b20.js"><link rel="prefetch" href="/assets/js/151.b2040eea.js"><link rel="prefetch" href="/assets/js/152.7bc65661.js"><link rel="prefetch" href="/assets/js/153.1d7c65e3.js"><link rel="prefetch" href="/assets/js/154.1309de49.js"><link rel="prefetch" href="/assets/js/155.81d3ee1f.js"><link rel="prefetch" href="/assets/js/156.154a4ef2.js"><link rel="prefetch" href="/assets/js/16.e5eb6147.js"><link rel="prefetch" href="/assets/js/17.57853c4a.js"><link rel="prefetch" href="/assets/js/18.cb9d7518.js"><link rel="prefetch" href="/assets/js/19.f354dc47.js"><link rel="prefetch" href="/assets/js/2.570d8a23.js"><link rel="prefetch" href="/assets/js/20.b5af7fad.js"><link rel="prefetch" href="/assets/js/21.0b1928fe.js"><link rel="prefetch" href="/assets/js/22.f78666de.js"><link rel="prefetch" href="/assets/js/23.29c3f366.js"><link rel="prefetch" href="/assets/js/24.6f596516.js"><link rel="prefetch" href="/assets/js/25.14067b60.js"><link rel="prefetch" href="/assets/js/26.74ba4989.js"><link rel="prefetch" href="/assets/js/27.13d60edd.js"><link rel="prefetch" href="/assets/js/28.9523cb32.js"><link rel="prefetch" href="/assets/js/29.8ec842e9.js"><link rel="prefetch" href="/assets/js/3.3fb3d2e0.js"><link rel="prefetch" href="/assets/js/30.805597a8.js"><link rel="prefetch" href="/assets/js/31.831b195d.js"><link rel="prefetch" href="/assets/js/32.063c672d.js"><link rel="prefetch" href="/assets/js/33.6d93fac3.js"><link rel="prefetch" href="/assets/js/34.56e8263c.js"><link rel="prefetch" href="/assets/js/35.dbe688bb.js"><link rel="prefetch" href="/assets/js/36.dc5af2c1.js"><link rel="prefetch" href="/assets/js/37.0a7494f6.js"><link rel="prefetch" href="/assets/js/38.fe4fc171.js"><link rel="prefetch" href="/assets/js/39.f5ed5e92.js"><link rel="prefetch" href="/assets/js/4.2c405ec8.js"><link rel="prefetch" href="/assets/js/40.fe7e2714.js"><link rel="prefetch" href="/assets/js/41.30b0811d.js"><link rel="prefetch" href="/assets/js/42.76f52d62.js"><link rel="prefetch" href="/assets/js/43.e7bb0817.js"><link rel="prefetch" href="/assets/js/44.ead0e883.js"><link rel="prefetch" href="/assets/js/45.235df046.js"><link rel="prefetch" href="/assets/js/46.5f09e829.js"><link rel="prefetch" href="/assets/js/47.67116354.js"><link rel="prefetch" href="/assets/js/48.31f34543.js"><link rel="prefetch" href="/assets/js/49.10b5ebba.js"><link rel="prefetch" href="/assets/js/5.6f47322c.js"><link rel="prefetch" href="/assets/js/50.c0f0b7f1.js"><link rel="prefetch" href="/assets/js/51.5143f3bf.js"><link rel="prefetch" href="/assets/js/52.eeddfd48.js"><link rel="prefetch" href="/assets/js/53.eb790db5.js"><link rel="prefetch" href="/assets/js/54.8fe5421c.js"><link rel="prefetch" href="/assets/js/55.d8f9004b.js"><link rel="prefetch" href="/assets/js/56.62ac9b92.js"><link rel="prefetch" href="/assets/js/57.a9caec0d.js"><link rel="prefetch" href="/assets/js/58.f93fc522.js"><link rel="prefetch" href="/assets/js/59.a81a03aa.js"><link rel="prefetch" href="/assets/js/6.8c2ea393.js"><link rel="prefetch" href="/assets/js/60.ab782775.js"><link rel="prefetch" href="/assets/js/61.6dd12daf.js"><link rel="prefetch" href="/assets/js/62.76f4b01f.js"><link rel="prefetch" href="/assets/js/63.6f8a4742.js"><link rel="prefetch" href="/assets/js/64.6f8bb1fa.js"><link rel="prefetch" href="/assets/js/65.4120a44b.js"><link rel="prefetch" href="/assets/js/66.360c2d2b.js"><link rel="prefetch" href="/assets/js/67.26f84d32.js"><link rel="prefetch" href="/assets/js/68.68f45e5e.js"><link rel="prefetch" href="/assets/js/69.e311eb56.js"><link rel="prefetch" href="/assets/js/7.6762b2d7.js"><link rel="prefetch" href="/assets/js/70.cea82674.js"><link rel="prefetch" href="/assets/js/71.783ddcf7.js"><link rel="prefetch" href="/assets/js/72.e5467385.js"><link rel="prefetch" href="/assets/js/73.b8fb681b.js"><link rel="prefetch" href="/assets/js/74.1bae37db.js"><link rel="prefetch" href="/assets/js/75.024387e5.js"><link rel="prefetch" href="/assets/js/76.a8e53010.js"><link rel="prefetch" href="/assets/js/77.8c55500a.js"><link rel="prefetch" href="/assets/js/78.7ce90bf5.js"><link rel="prefetch" href="/assets/js/79.ef71713f.js"><link rel="prefetch" href="/assets/js/8.788a6364.js"><link rel="prefetch" href="/assets/js/80.acad589d.js"><link rel="prefetch" href="/assets/js/81.02670d10.js"><link rel="prefetch" href="/assets/js/82.53b7b1ac.js"><link rel="prefetch" href="/assets/js/83.99eb8581.js"><link rel="prefetch" href="/assets/js/84.d1535ce3.js"><link rel="prefetch" href="/assets/js/85.fe2b7de9.js"><link rel="prefetch" href="/assets/js/86.41850272.js"><link rel="prefetch" href="/assets/js/87.1cdc6df9.js"><link rel="prefetch" href="/assets/js/88.01bf3461.js"><link rel="prefetch" href="/assets/js/89.17c69819.js"><link rel="prefetch" href="/assets/js/9.3813842d.js"><link rel="prefetch" href="/assets/js/90.f6ae7e35.js"><link rel="prefetch" href="/assets/js/91.507bc284.js"><link rel="prefetch" href="/assets/js/92.90551782.js"><link rel="prefetch" href="/assets/js/93.dc442d78.js"><link rel="prefetch" href="/assets/js/94.315f4e94.js"><link rel="prefetch" href="/assets/js/95.ccd6c6bf.js"><link rel="prefetch" href="/assets/js/96.0c6d89d0.js"><link rel="prefetch" href="/assets/js/97.1a9f10a9.js"><link rel="prefetch" href="/assets/js/98.43be3caa.js"><link rel="prefetch" href="/assets/js/99.54c8207b.js">
    <link rel="stylesheet" href="/assets/css/0.styles.0dbae9ec.css">
  </head>
  <body>
    <div id="app" data-server-rendered="true"><div class="theme-container"><header class="navbar"><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/" class="home-link router-link-active"><!----> <span class="site-name">whoway</span></a> <div class="links" style="max-width:nullpx;"><div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><div class="nav-item"><div class="dropdown-wrapper"><a class="dropdown-title"><span class="title">🎓Coding</span> <span class="arrow right"></span></a> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/00.Coding/TheBeautyOfProgramming/" class="nav-link">🔖编程之美题解</a></li><li class="dropdown-item"><!----> <a href="/00.Coding/CodeWarehouse/" class="nav-link">🔖代码意识流</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><a class="dropdown-title"><span class="title">🚀语言</span> <span class="arrow right"></span></a> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/01.Language/Overview/" class="nav-link">🔖概述</a></li><li class="dropdown-item"><!----> <a href="/01.Language/C/" class="nav-link">⭐️C</a></li><li class="dropdown-item"><!----> <a href="/01.Language/Cpp/" class="nav-link">🚀C++</a></li><li class="dropdown-item"><!----> <a href="/01.Language/Java/" class="nav-link">☕️Java</a></li><li class="dropdown-item"><!----> <a href="/01.Language/Python/" class="nav-link">🧩Python3</a></li></ul></div></div><div class="nav-item"><a href="/02.Hardware/" class="nav-link">✔️硬件基础</a></div><div class="nav-item"><div class="dropdown-wrapper"><a class="dropdown-title"><span class="title">⭐️软件基础</span> <span class="arrow right"></span></a> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/03.Software/01.DataStructureAndAlgorithm/" class="nav-link">🐾数据结构和算法</a></li><li class="dropdown-item"><!----> <a href="/03.Software/02.OS/" class="nav-link">💻操作系统</a></li><li class="dropdown-item"><!----> <a href="/03.Software/03.Net/" class="nav-link">☁️计算机网络</a></li><li class="dropdown-item"><!----> <a href="/03.Software/04.SE/" class="nav-link">✅软件工程</a></li></ul></div></div><div class="nav-item"><a href="/04.Database/" class="nav-link">🎨数据库</a></div><div class="nav-item"><a href="/05.Engineer/" class="nav-link router-link-active">🔖学术/工程</a></div><div class="nav-item"><div class="dropdown-wrapper"><a class="dropdown-title"><span class="title">⚙️工具</span> <span class="arrow right"></span></a> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/06.Tools/01.employment/" class="nav-link">🔖求职</a></li><li class="dropdown-item"><!----> <a href="/06.Tools/02.efficiency/" class="nav-link">🚀效能</a></li><li class="dropdown-item"><!----> <a href="/06.Tools/03.windows/" class="nav-link">⚙️Windows</a></li><li class="dropdown-item"><!----> <a href="/06.Tools/04.design/" class="nav-link">🧩设计</a></li><li class="dropdown-item"><!----> <a href="/06.Tools/05.linux/" class="nav-link">🐉Linux</a></li></ul></div></div><div class="nav-item"><a href="https://github.com/whoway" target="_blank" rel="noopener noreferrer" class="nav-link external">
  GitHub
  <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></div> <!----></nav></div></header> <div class="sidebar-mask"></div> <div class="sidebar"><nav class="nav-links"><div class="nav-item"><div class="dropdown-wrapper"><a class="dropdown-title"><span class="title">🎓Coding</span> <span class="arrow right"></span></a> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/00.Coding/TheBeautyOfProgramming/" class="nav-link">🔖编程之美题解</a></li><li class="dropdown-item"><!----> <a href="/00.Coding/CodeWarehouse/" class="nav-link">🔖代码意识流</a></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><a class="dropdown-title"><span class="title">🚀语言</span> <span class="arrow right"></span></a> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/01.Language/Overview/" class="nav-link">🔖概述</a></li><li class="dropdown-item"><!----> <a href="/01.Language/C/" class="nav-link">⭐️C</a></li><li class="dropdown-item"><!----> <a href="/01.Language/Cpp/" class="nav-link">🚀C++</a></li><li class="dropdown-item"><!----> <a href="/01.Language/Java/" class="nav-link">☕️Java</a></li><li class="dropdown-item"><!----> <a href="/01.Language/Python/" class="nav-link">🧩Python3</a></li></ul></div></div><div class="nav-item"><a href="/02.Hardware/" class="nav-link">✔️硬件基础</a></div><div class="nav-item"><div class="dropdown-wrapper"><a class="dropdown-title"><span class="title">⭐️软件基础</span> <span class="arrow right"></span></a> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/03.Software/01.DataStructureAndAlgorithm/" class="nav-link">🐾数据结构和算法</a></li><li class="dropdown-item"><!----> <a href="/03.Software/02.OS/" class="nav-link">💻操作系统</a></li><li class="dropdown-item"><!----> <a href="/03.Software/03.Net/" class="nav-link">☁️计算机网络</a></li><li class="dropdown-item"><!----> <a href="/03.Software/04.SE/" class="nav-link">✅软件工程</a></li></ul></div></div><div class="nav-item"><a href="/04.Database/" class="nav-link">🎨数据库</a></div><div class="nav-item"><a href="/05.Engineer/" class="nav-link router-link-active">🔖学术/工程</a></div><div class="nav-item"><div class="dropdown-wrapper"><a class="dropdown-title"><span class="title">⚙️工具</span> <span class="arrow right"></span></a> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/06.Tools/01.employment/" class="nav-link">🔖求职</a></li><li class="dropdown-item"><!----> <a href="/06.Tools/02.efficiency/" class="nav-link">🚀效能</a></li><li class="dropdown-item"><!----> <a href="/06.Tools/03.windows/" class="nav-link">⚙️Windows</a></li><li class="dropdown-item"><!----> <a href="/06.Tools/04.design/" class="nav-link">🧩设计</a></li><li class="dropdown-item"><!----> <a href="/06.Tools/05.linux/" class="nav-link">🐉Linux</a></li></ul></div></div><div class="nav-item"><a href="https://github.com/whoway" target="_blank" rel="noopener noreferrer" class="nav-link external">
  GitHub
  <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></div> <!----></nav>  <ul class="sidebar-links"><li><div class="sidebar-group first"><p class="sidebar-heading open"><span>gcc选项命令</span> <!----></p> <ul class="sidebar-group-items"><li><a href="/05.Engineer/tool/A1.gcc%E9%80%89%E9%A1%B9%E5%91%BD%E4%BB%A4.html#_1-gcc的历史" class="sidebar-link">1.gcc的历史</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/05.Engineer/tool/A1.gcc%E9%80%89%E9%A1%B9%E5%91%BD%E4%BB%A4.html#_1-1-gcc的名字变化历史" class="sidebar-link">1.1.gcc的名字变化历史</a></li><li class="sidebar-sub-header"><a href="/05.Engineer/tool/A1.gcc%E9%80%89%E9%A1%B9%E5%91%BD%E4%BB%A4.html#_1-2-ppt-什么是gcc『01』" class="sidebar-link">1.2.PPT.什么是GCC『01』</a></li><li class="sidebar-sub-header"><a href="/05.Engineer/tool/A1.gcc%E9%80%89%E9%A1%B9%E5%91%BD%E4%BB%A4.html#_1-3-ppt编程语言的发展" class="sidebar-link">1.3.PPT编程语言的发展</a></li><li class="sidebar-sub-header"><a href="/05.Engineer/tool/A1.gcc%E9%80%89%E9%A1%B9%E5%91%BD%E4%BB%A4.html#_1-4-gcc工作流程" class="sidebar-link">1.4.GCC工作流程</a></li></ul></li><li><a href="/05.Engineer/tool/A1.gcc%E9%80%89%E9%A1%B9%E5%91%BD%E4%BB%A4.html#_2-gcc和g-的区别（2张）" class="sidebar-link">2.gcc和g++的区别（2张）</a><ul class="sidebar-sub-headers"></ul></li><li><a href="/05.Engineer/tool/A1.gcc%E9%80%89%E9%A1%B9%E5%91%BD%E4%BB%A4.html#_3-ppt-gcc常用参数选项『05-06』" class="sidebar-link">3.PPT.GCC常用参数选项『05-06』</a><ul class="sidebar-sub-headers"></ul></li><li><a href="/05.Engineer/tool/A1.gcc%E9%80%89%E9%A1%B9%E5%91%BD%E4%BB%A4.html#_4-分析gcc源码选项" class="sidebar-link">4.分析gcc源码选项</a><ul class="sidebar-sub-headers"></ul></li><li><a href="/05.Engineer/tool/A1.gcc%E9%80%89%E9%A1%B9%E5%91%BD%E4%BB%A4.html#gcc的静态库-动态库" class="sidebar-link">🔷gcc的静态库+动态库</a><ul class="sidebar-sub-headers"></ul></li><li><a href="/05.Engineer/tool/A1.gcc%E9%80%89%E9%A1%B9%E5%91%BD%E4%BB%A4.html#_1-静态库-a的制作" class="sidebar-link">1.静态库.a的制作</a><ul class="sidebar-sub-headers"></ul></li><li><a href="/05.Engineer/tool/A1.gcc%E9%80%89%E9%A1%B9%E5%91%BD%E4%BB%A4.html#_2-静态库的使用" class="sidebar-link">2.静态库的使用</a><ul class="sidebar-sub-headers"></ul></li><li><a href="/05.Engineer/tool/A1.gcc%E9%80%89%E9%A1%B9%E5%91%BD%E4%BB%A4.html#_3-动态库-so的制作和使用" class="sidebar-link">3.动态库.so的制作和使用</a><ul class="sidebar-sub-headers"></ul></li><li><a href="/05.Engineer/tool/A1.gcc%E9%80%89%E9%A1%B9%E5%91%BD%E4%BB%A4.html#_4-动态库加载失败的原因" class="sidebar-link">4.动态库加载失败的原因</a><ul class="sidebar-sub-headers"></ul></li><li><a href="/05.Engineer/tool/A1.gcc%E9%80%89%E9%A1%B9%E5%91%BD%E4%BB%A4.html#_5-解决动态库加载失败的问题" class="sidebar-link">5.解决动态库加载失败的问题</a><ul class="sidebar-sub-headers"></ul></li><li><a href="/05.Engineer/tool/A1.gcc%E9%80%89%E9%A1%B9%E5%91%BD%E4%BB%A4.html#_6-静态库和动态库的对比" class="sidebar-link">6.静态库和动态库的对比</a><ul class="sidebar-sub-headers"></ul></li></ul></div></li></ul> </div> <div class="page"> <div class="content"><h1 id="gcc选项命令"><a href="#gcc选项命令" class="header-anchor">#</a> gcc选项命令</h1> <ul><li>公司用到的标记⭐️</li></ul> <h2 id="_1-gcc的历史"><a href="#_1-gcc的历史" class="header-anchor">#</a> 1.gcc的历史</h2> <h3 id="_1-1-gcc的名字变化历史"><a href="#_1-1-gcc的名字变化历史" class="header-anchor">#</a> 1.1.gcc的名字变化历史</h3> <p>我们就要去使用到这个gcc 编译套件。</p> <ul><li>那gcc 呢它的<strong>原名</strong>啊叫做<code>gnu c compile</code>啊，那翻译成中文呢就是gnu c 语言编译器啊。那言下之意呢就是。
这个g c c 啊，他原先啊是作为我们c 语言的一个编译器啊，那么<strong>随着这个gcc 的一个发展呢啊，那他现在呢他支持更多的这个语言的一个编译了，所以呢：他就不能再叫这个啊gnu c 语言编译器了啊!!!</strong></li> <li>所以<font style="background:yellow;">他<strong>改名了，改成什么呢</strong>？叫<code>gnu compiler collection</code>！</font></li> <li>那翻译成中文呢就是<strong>gnu编译套件</strong>啊，取的是每个这个单词的首字母，对吧？</li></ul> <p>所谓的这个编程语言译器呢其实就是编译器啊</p> <div class="language-bash line-numbers-mode"><pre class="language-bash"><code>gcc -std<span class="token operator">=</span>c99 solve.cpp
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><p>在我们这个呃linux 当中啊啊就是我们安装的这个<strong>Unbuntu18</strong>里面啊，我们如何去。
安装这个gcc 机呢啊那我们用一个命令啊叫sudo XXXX
那我们要安装什么呢？gcc 还有g++啊，那么这个gcc合计g++啊，他们是什么？
啊，其实就是这个gcc 它里面的两个这个命令啊！或者说两个工具啊！！！一个呢是『专门』用于去编译这个c 语言。一个呢是专门去编译这个c++语言的啊，大家呢先加去理解啊，！！！后面呢会详细的给大家去介绍这两个啊这个工具啊。</p> <p>然后呢这个版本啊呃一定要大于这个4.85啊！！！</p> <ul><li>为什么要大于四点八点五呢？因为呃我们啊后续啊如果说写这个c +程序的话呢。</li> <li>啊，我们呃可能呢会用到这个c++11的这个它的一些特性，对吧？</li> <li>啊，新功能啊，那么像这个四点八点五呢啊开始啊,往后他就支持这个啊c 加加11啊，它的这个。个特性啊，那如果说你呃版本是小于它的话呢，那可能呢就啊你写一些这个c 加加幺幺的一些代码的话呢，他就不能够正确的编译。</li> <li>那默认情况下呢，这个乌邦图啊，它是没有安装的啊啊!!!</li></ul> <p>你创建c 代码的话呢，你首先呢是不是要touch。啊，比如说呢来一个这个test.c 创建出来，对吧？然后呢通过v i m 呢去编辑一下，然后你在这里面去写代码了，对吧？那么这个v r m 编辑器产区写代码呢非常不方便啊。
没有一些这个快捷提示啊，那我们怎么办呢？我们使用这个vs code。
啊，我们通过这个vs code 呢去远程连接到我们这个Unbuntu啊！</p> <h3 id="_1-2-ppt-什么是gcc『01』"><a href="#_1-2-ppt-什么是gcc『01』" class="header-anchor">#</a> 1.2.PPT.什么是GCC『01』</h3> <ul><li>GCC原名为GNU C语言编译器(GNU C Compiler)</li> <li>GCC (GNU compiler collection，GNU编译器套件）是由 GNU开发的编程语言译器。GNU编译器套件包括<code>C、C++、0bjective-c、Java、Ada</code>和 <code>Go</code> 语言前端，也包括了这些语言的库(如<code>libstdc++</code>，<code>libgcj</code>等)</li> <li>GCC不仅支持<code>C</code>的许多&quot;方言&quot;，也可以区别不同的C语言标准；可以使用<strong>命令行选项</strong>来控制编译器在翻译源代码时应该遵循哪个C标准。例如，当使用命令行参数<code>-std=c99</code>启动GCC时，编译器支持C99标准。</li> <li>安装命令<code>sudo apt install gcc g++</code>『版本&gt;4.8.5』</li> <li>查看版本<code>gcc/g++ -v/--version</code></li></ul> <div class="language-bash line-numbers-mode"><pre class="language-bash"><code>gcc --version
g++ --version
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><h3 id="_1-3-ppt编程语言的发展"><a href="#_1-3-ppt编程语言的发展" class="header-anchor">#</a> 1.3.PPT编程语言的发展</h3> <p><img src="https://cdn.jsdelivr.net/gh/HACV/picture/img/language02.png" alt="language02"></p> <h3 id="_1-4-gcc工作流程"><a href="#_1-4-gcc工作流程" class="header-anchor">#</a> 1.4.GCC工作流程</h3> <p><img src="https://cdn.jsdelivr.net/gh/HACV/picture/img/gcc03.png" alt="gcc03"></p> <p>接下来呢再给大家去说一说这个gcc它的一个工作流程！
那么我们刚才啊是不是直接啊使用一个指令啊，gcc 然后呢后面是这个啊c 代码对吧？那最终呢他会给我们生成一个可执行文件。实在这个gcc的一个呃底层呢，它不仅仅啊就是说直接给你生成一个啊这个可执行文件啊，那其实呢它会经过几个步骤啊</p> <h4 id="预处理器（生成-i）"><a href="#预处理器（生成-i）" class="header-anchor">#</a> 预处理器（生成<code>.i</code>）</h4> <p>1、啊，比如说有这个.h 点c 啊，d c t p p. 那么它首先呢要干嘛呢？
经过我们这个gcc 里面的一个==预处理器进==行干嘛呢？进行一个预处理啊，那得到的是一个预处理后的源代码。
啊，那么预处理做什么事情呢？啊，一般呢做这个,在这个c 或者c 加加代码里面是不是导入了一些头文件啊，对吧？他会把这些头文件呢进行一个展开，其实就是把头文件里面的内容复制到我们这个源代码当中，对吧？
然后呢呃还有比如说把我们代码当中的注释啊。
给他删除掉对吧？注释你没有必要保留到这个呃程序当中嘛，对不对啊，最终呢他会给你删除掉啊，然后呢，比如说这个我们。
在程序当中啊定义的一些宏，他也会做一些这个宏替换啊。那么这个预处理后的源代码呢，一般呢是以这个点i 结尾的！而且这个里面的代码呢，大家也是能够看得懂的，其实就是文本代码！</p> <h4 id="编译器「我的研究方向」（生成-s）"><a href="#编译器「我的研究方向」（生成-s）" class="header-anchor">#</a> 编译器「我的研究方向」（生成<code>.s</code>）</h4> <p>2、那么接着呢，他预处理完了以后啊，他要经过这个==编译器「我的研究方向」==啊，经过编译器干嘛呢？进行一个编译，编译成这个汇编代码。汇编代码呢，一般是以这个点s 结尾！</p> <p>啊，那这个里面呢其实你也能够看懂啊，但是呢呃都是一些这个啊英文符号啊，这个英文单词啊如果说你没有学过汇编的话呢！ 你是看不懂的。好</p> <h4 id="汇编器as"><a href="#汇编器as" class="header-anchor">#</a> 汇编器as</h4> <p>3、那再往后呢汇编代码呢，它需要经过一个叫==汇编器==啊，进行一个汇编，汇编成什么呢？</p> <p>目标代码啊,那么目标代码呢一般是以点o 结尾啊。</p> <p>好，那注意了，他会边成目标代码以后呢，这个目标代码呢你可以理解为就是这个计算机它能够识别的这些！
一零一零的二进制指令啊，这个代码啊</p> <h4 id="链接器ld（生成-out）"><a href="#链接器ld（生成-out）" class="header-anchor">#</a> 链接器ld（生成<code>.out</code>）</h4> <p>4、那么接下来呢他还要干嘛呢？他还要进行一个连接啊，那连接的话呢他要结合一些，比如说<code>启动代码</code>呀！
啊，库代码啊，对，这个库代码我们后面呢会给大家去介绍这个静态库和动态库其实就是指的这个库代码。
好，然后呢还有一些其他的目标代码。
啊，那最终呢干嘛呢？通过一个叫链接器的这个工具啊进行一个链接，把它链接成一个可执行程序啊。</p> <p>5、那可执行程序呢一般后缀名呢。
啊，这个点e f c 只是在windows 平台下，对吧？还有在这个啊linux 平台下呢有这个点out t 啊减二的结尾啊。好，那这个是。
gcc 它的一个工作流程。那现在呢大家应该啊都清楚了，对不对？</p> <div class="language-txt line-numbers-mode"><pre class="language-text"><code>g++ solve.cpp -E -o test.i
g++ -E solve.cpp -o test.i也行

g++ test.i -S -o test.s
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br></div></div><ul><li>然后可以用Vscode看这个<code>test.i</code></li> <li>头文件展开</li> <li>代码非常多，发现</li> <li>发现宏Pi被替换成3.14了</li> <li>注释也被删掉了</li></ul> <p>下面开始汇编。指令是<code>-c</code></p> <div class="language-bash line-numbers-mode"><pre class="language-bash"><code>g++ test.s -s -o test.o
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><ul><li>test.o是二进制文件了。无法看懂了</li></ul> <p>接下来是链接，</p> <p>但是其实你这种情况下，可以直接执行了</p> <div class="language-bash line-numbers-mode"><pre class="language-bash"><code><span class="token punctuation">[</span>root@CentosLinux PLinux<span class="token punctuation">]</span><span class="token comment"># ./te.o </span>
Hello World
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><p>原因是：我们前面用的小写的-s</p> <p>它会对你代码进行一个汇编，然后也会给你生成这样的一个可执行文件。</p> <p>注意，我们发现</p> <ul><li><code>-E</code>生成<code>.s</code></li> <li><code>-S</code>生成<code>.i</code></li></ul> <p>如果我们直接将-S作用于.c发现！</p> <div class="language-c line-numbers-mode"><pre class="language-c"><code>gcc test<span class="token punctuation">.</span>c <span class="token operator">-</span>S
  生成  test<span class="token punctuation">.</span>s
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><p>发现，预编译，也给你做了！</p> <p>所以，我们先前<code>gcc test.c</code></p> <p>它里面做了哪些操作？</p> <ul><li>预处理、编译、汇编、链接</li></ul> <h2 id="_2-gcc和g-的区别（2张）"><a href="#_2-gcc和g-的区别（2张）" class="header-anchor">#</a> 2.gcc和g++的区别（2张）</h2> <blockquote><p>PPT</p></blockquote> <ul><li>gcc和g++都是GNU(组织)的一个编译器。</li> <li><font style="background:yellow;">误区一</font>: gcc只能编译c代码， g++只能编译c++代码。两者都可以，请注意:
<ul><li>后缀为<code>.c</code>的, gcc把它当作是<code>c</code>程序，而g++当作是 <code>c++</code>程序</li> <li>后缀为.cpp 的，<strong>两者都会认为是C++程序</strong>，C++的语法规则更加严谨一些</li> <li>编译阶段, g++会调用gcc，对于C++代码，两者是等价的，但是<font style="background:yellow;">因为 gcc命令不能自动和C++程序使用的库<strong>联接</strong></font>，所以通常用g++来完成链接，为了统一起见，干脆编译/链接统统用g++了，这就给人一种错觉，好像cpp程序只能用g++似的</li></ul></li></ul> <blockquote><p>又想到了，Linux下，其实是没有后缀概念的。</p></blockquote> <ul><li><font style="background:yellow;">误区二</font>: gcc 不会定义<code>_cplusplus</code>宏，而g++会『或许这个就是，为啥？gcc不能自动和C++程序使用的库连接的缘由？』
<ul><li>实际上，<font style="background:yellow;">这个宏只是标志着编译器将会把代码按c还是C++语法来解释</font></li> <li>如上所述，如果后缀为<code>.c</code>，并且采用gcc编译器，则该宏就是未定义的，否则，就是已定义</li></ul></li> <li><font style="background:yellow;">误区三</font>:编译只能用gcc，链接只能用g++
<ul><li>严格来说，这句话不算错误，但是它混淆了概念，应该这样说:编译可以用<code>gcc/g++</code>，而链接可以用<code>g++</code>或者<code>gcc -lstdc++</code>。<font style="background:yellow;">记住</font></li> <li><strong>gcc命令不能自动和C++程序使用的库联接</strong>，所以通常使用g++来完成联接。但在编译阶段， g++会自动调用gcc，二者等价</li></ul></li></ul> <h2 id="_3-ppt-gcc常用参数选项『05-06』"><a href="#_3-ppt-gcc常用参数选项『05-06』" class="header-anchor">#</a> 3.PPT.GCC常用参数选项『05-06』</h2> <ul><li><code>-o &lt;filename&gt;</code>:指定输出文件名</li></ul> <div class="language-txt line-numbers-mode"><pre class="language-text"><code>`-e` name:  
`-e name`:指定name为程序入口地址    
`-ffreestanding`;编译独立的程序，不会自动链接C运行库、启动文件等   
`-finline-functions,- fno. inline functions`:启用/关闭内联函数  
`-L &lt;directory&gt;`:指定链接时查找路径，多个路径之间用冒号隔开  
`-nostarfiles`:不要链接启动文件，比如crtbegin.o、crtend.o  
`-nostdlib`:不要链接标准库文件，主要是C运行库 

`-shared`:产生共享对象文件  
`-static`:使用静态链接  ⭐️ 

`-PIE`:使用地址无关代码模式编译可执行文件  
`-XLinker &lt;option&gt;`:把option传递给链接器  
`-Wl &lt;option&gt;`:把option传递给链接器，与上面的选项类似  
`-fomit-frame-pointer`:禁止使用EBP作为函数帧指针  
`-fno-buitin`:禁止GCC编译器内置函数  
`-fno-stack-	protector`:是指关闭堆栈保护功能  
`-ffunctionsections`:将每个函数编译到独立的代码段  
`-fdata-sections`:将全局/静态变量编译到独立的数据段  
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br></div></div><table><thead><tr><th>gcc编译选项</th> <th>说明</th></tr></thead> <tbody><tr><td>-E</td> <td><font style="background:yellow;">预处理</font>指定的源文件，不进行编译，只进行预处理并把预处理结果输出</td></tr> <tr><td>-S</td> <td>编译指定的源文件,但是<font style="background:yellow;">不进行汇编</font>，  输出编译后的汇编代码文件⭐️</td></tr> <tr><td>-c</td> <td>编译、汇编指定的源文件,但是<font style="background:yellow;">不进行链接</font>，只编译不链接⭐️</td></tr> <tr><td><code>-o [file1] [file2] / [file2] -o [file1]</code></td> <td>将文件 file2编译成可执行文件 file1</td></tr> <tr><td><code>-I directory</code></td> <td>指定include包含文件的搜索目录，指定头文件路径⭐️</td></tr> <tr><td><code>-g</code></td> <td>在编译的时候，生成调试信息，该程序可以被调试器调试，在编译结果中加入调试信息， 就是加入<strong>GDB调试器</strong>能够识别的格式⭐️</td></tr> <tr><td><code>-D</code></td> <td>在程序编译的时候，指定一个宏『宏的单词，Drague&gt;&gt;   ⭐️</td></tr> <tr><td><code>-w</code></td> <td>不生成任何警告信息</td></tr> <tr><td><code>-Wall</code></td> <td>生成所有警告信息，对源代码中的多数编译警告进行启用</td></tr> <tr><td>-On</td> <td>n的取值范围: 0~3。编译器的优化选项的4个级别, -O0表示没有优化, –O1为缺省值, -O3优化级别最高「O的意思是<strong>o</strong>ptimization的首字母」⭐️</td></tr> <tr><td><code>-l</code></td> <td>在程序编译的时候，指定使用的库</td></tr> <tr><td><code>-L</code></td> <td>指定编译的时候，搜索的库的路径。</td></tr> <tr><td><code>-fPIC</code>或<code>-fpic</code></td> <td>生成与位置无关的代码，使用地址无关代码模式进行编译</td></tr> <tr><td><code>-shared</code></td> <td>生成共享目标文件，通常用在建立共享库时</td></tr> <tr><td><code>-std</code></td> <td><font style="background:yellow;">指定C方言</font>，如：<code>-std=c99</code>，gcc默认的方言是GNU C</td></tr></tbody></table> <ul><li><code>-O0</code>:关闭所有优化选项。（前面是<strong>大写字母O</strong>，后面是数字0）</li></ul> <h2 id="_4-分析gcc源码选项"><a href="#_4-分析gcc源码选项" class="header-anchor">#</a> 4.分析gcc源码选项</h2> <div class="language-bash line-numbers-mode"><pre class="language-bash"><code>gcc -fdump-tree-all test.c
gcc -fdump-rtl-all test.c	<span class="token comment">#生成rtl</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><h2 id="gcc的静态库-动态库"><a href="#gcc的静态库-动态库" class="header-anchor">#</a> 🔷gcc的静态库+动态库</h2> <h2 id="_1-静态库-a的制作"><a href="#_1-静态库-a的制作" class="header-anchor">#</a> 1.静态库<code>.a</code>的制作</h2> <ul><li><font style="background:yellow;">单词：archive，v.归档</font></li></ul> <p><img src="https://cdn.jsdelivr.net/gh/HACV/picture/img/image-20210705160843670.png" alt="image-20210705160843670"></p> <div class="language-txt line-numbers-mode"><pre class="language-text"><code>好了，这节课呢我们去学习一下静态库的制作啊。
那首先呢我们要搞清楚什么是库。那所谓的库呢，其实就是库文件啊，它呢也是计算机上的一类文件。

我们可以简单的把库文件看成是一种代码仓库啊，也就是说这个库文件里面呢保存的都是代码啊，当然了，这个地方保存的代码呢并不是说我们能够直接看懂的这个文本代码。而是一些这个二进制的代码。那库呢他提供给使用者一些可以直接拿来用的变量函数或者类等等。

这个呢就是库文件，那库呢它是一种特殊的程序啊，那我们编写库的程序啊和这个编写一般的程序啊。他的这个区别啊不大啊，只不过呢这个库啊它不能单独的运行啊，因为他是要提供给别人去使用的。

那库文件呢有两种啊，一种呢称之为静态库啊，另外一种呢叫做动态库啊，也叫共享库啊。

那这节课呢。先给大家去介绍一下静态库它的一个制作。

那这个静态库和动态库他们的区别是什么呢？

区别呢就是静态库啊，他在程序的链接阶段啊被复制到了程序当中。

啊，最后呢再到这个链接链接成这个可执行程序，对吧？
那么其实这个静态库和动态库啊都是在这个啊链接阶段呢。
做的一些处理啊。

- 那静态库呢在这个链接阶段呢就复制到了我们啊使用它的这个程序当中啊
- 而这个动态库呢。他在链接阶段呢并没有复制到程序当中啊，那什么时候啊到这个程序当中呢，其实动态库呢它也不会啊被复制到这个程序当中。

考试呢。
加载到这个内存当中，然后呢程序去啊使用它，去掉它啊。所以呢这个在程序运行的时候呢，由系统呢动态的去加载到内存当中啊，把这个动态库。
加载到内存当中，然后呢共程序呢去调用啊，所以呢我们也称之为动态库，对吧？就这个原因啊，动态的去加载到内存当中。然后呢去使用啊。


那么接下来大家想一想这个库啊它有什么好处呢？
啊，首先第一个好处呢就是可以做这个代码的一个保密啊，那举个例子，比如说呢啊你开发了一个这个程序啊。
呃，比如说你写了一套算法啊，做这个压缩的对吧？
那比如说这个市面上啊，他做的最好的这个压缩啊，它能够压缩百分之八十。
是吧啊压缩呃就是说压缩到百分之八十对吧？也就是说压缩了百分之二十啊啊那如果说啊哎你写了一个这个压缩的一个算法啊，你能够把这个压缩率啊。达到了这个百分之五十，那你是不是就很厉害了，是吧？那你是不是要把你的这个程序啊拿去卖钱，对不对？那你卖钱的话呢，你不可能说直接把你的这个写好的源代码呀。

发给人家对吧？那这样的话，别人不就知道你的这个逻辑的嘛，对吧？知道你怎么写的吗？是不是啊，那我们可以怎么办呢？我们可以把我们写好的这个程序啊。打成一个库啊，所谓的这个库呢，其实里面就是一些代码嘛，对吧？啊，这些代码呢实现了一些功能啊，那打好成这个库以后呢，你是不是发给别人。然后呢，每一个这个卖多少钱一个卖多少钱是吧？那别人呢他也很难呢去能够知道你这个里面啊程序是怎么写的，对吧啊？

那有的同学说，那这个不是有这个啊反编译的这个工具嘛，把你这个程序反边一下，不就能看到了吗？啊，其实对于我们这个c 语言。c 天下来说的话，这个反编译之后啊，他的这个代码的还原度呢是非常低的啊。

你不像这一个加法，那加法语言呢，他如果说啊这个写的代码被。反编译以后啊啊他的这个还原度呢基本上能够达到这个百分之九十五以上啊。

那所以说呢大家也不用担心这个呃如果说你写的这个库。啊，会不会被别人这个反编译啊，其实他的这个还原程度啊是非常低的啊，而且呢啊即使你还原回去，别人呢也要进行一些的这个逻辑的一个处理啊。
他得想你这个逻辑怎么写的啊？


这是第一个好处。那么第二个好处呢就是方便部署和分发。
啊，比如说呢你在这个公司啊，你去写这个程序，对吧？啊，你写了这个一百个代码。
啊，就是一百个这个原文件是吧，那如果说你要给别人用的话呢啊你可能要把这一百个原代码呢都发给别人是吧？好，那如果说呢你打成一个库啊，那一个库文件。
发送是不是更快一点，对吧？方便我们进行一个部署和分发啊，这是第二好处啊。

</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br><span class="line-number">36</span><br><span class="line-number">37</span><br><span class="line-number">38</span><br><span class="line-number">39</span><br><span class="line-number">40</span><br><span class="line-number">41</span><br><span class="line-number">42</span><br><span class="line-number">43</span><br><span class="line-number">44</span><br><span class="line-number">45</span><br><span class="line-number">46</span><br><span class="line-number">47</span><br><span class="line-number">48</span><br></div></div><p><img src="https://cdn.jsdelivr.net/gh/HACV/picture/img/image-20210705161118742.png" alt="image-20210705161118742"></p> <div class="language-bash line-numbers-mode"><pre class="language-bash"><code>好，那接下来呢我们来看一下这个静态库啊。
是怎么去制作的？
那首先呢我们要搞清楚这个静态库啊，它的命名啊命名规则呢你必须要遵循这个规则来啊。那么这个linux 系统啊和这个windows 系统啊。
他的这个命名规则啊不一样啊，我们具体来看一下，比如说这个linux 平台啊啊它是以这个lib 开头，然后呢插插插。
啊，然后点a 啊，也就是以这个点a 结尾，对吧？后缀那像这个windows 平台呢是lib 叉叉叉点l i b 啊，那这样呢我们不考虑windows 平台啊。
我们就考虑这个linux 平台。
那么日本呢是啊library library 的一个单词啊，前三个这个字母对吧？表示这个库啊library。
那么他呢是前缀啊，而且呢是固定的啊，就是这么写的。
然后中间呢叉叉叉这个呢是酷的名字啊，这个需要大家呢自己去取啊，然后呢呃这个后缀呢是点a 它也是固定的。
啊，这是静态库，它是以点a 结尾的啊，这是命名规则。然后呢我们再来看一下这个静态库的制作分为两步。第一步呢是通过这个gcc 啊。
去获取点o 文件啊，比如说你有啊十个这个文件。
你要把这十个文件呢打成一个库啊，那你要通过g tt 呢获取这十个文件的这个点o 文件。
啊，这是第一步。
然后第二步呢，我们将这些点o 文件啊进行一个打包啊，那我们使用的是这个linux 里面一个啊指令叫ar 啊ar 工具。
啊，其实就是h 五的意思，对吧？前两个这个字母啊，h 五好怎么用呢？就是a r 然后呢参数rcs。
啊，然后后面呢是我要生成的这个啊库对吧？裤是立吧，插插插点a 这是静态库。
这是静态库它的一个名称吧，对不对？然后呢你要把哪些这个点o 文件。
啊，打包到这个古文件里面呢，后面呢就跟上这些点o 文件就ok 了啊。你看叉叉点o 叉叉叉点哦啊等等等啊，那么再给大家去简单的解释一下这个。
参数啊rcs 啊，那么r 呢就是表示啊我要往这个库文件里面呢插入啊，我们这个点o 文件啊，插入点o 文件，这是r 的一个。
啊，这个含义。然后呢c 呢是表示我要去创建这个备存文件啊，其实我们通过这个a r 指令啊创建出来的这个库啊，其实就。
就是这个备存文件啊，c 呢就是表示创建create 吗？对吧？那s 呢其实是表示去创建这个索引啊，因为你这个里面呢它的这个呃点o 文件的非常多。
那通过这个s 呢参数呢，它会生成这些文件的一些索引啊，方便呢去查找啊。那这个索引呢大家呃如果说学习过。
啊，这个my s q l 数据库的话啊，应该有一些了解，对吧？所以啊那其实你也可以理解为什么呢？比如说我们去查这个呃这个字典，对吧？
比如说我们传一个汉字啊，首先呢我们要知道这个汉字的一个偏旁，对吧？我们找到这个偏旁，然后呢再根据这个呃他的一个后面的一个部署啊，它的一些。
就是他的一个符号的一个个数啊，再去查对应的这个呃笔画，对吧？哎，查到，然后再去找到具体的这个汉字。
是吧那么这个索引其实就是相当于什么呀，相当于这个偏旁对吧？偏旁部首一样的啊，方便我们去查找的啊。好，那这个是静态库，它的命名规则和。
啊，制作的一个步骤啊，那下面呢就给大家去演示一下啊，如何去制作这个静态库。
那么在这呢啊我们首先啊去打开我们的这个呃visual c do。啊，扣的这是个vs code。好，那其实在这呢我们可以连接到这个。
啊，linux 目录下啊。
好，连接上来了啊，好，连接上来以后呢，其实我们在这啊可以去创建一个目录啊，新建文件夹，对吧？
比如说lisa。
零四。
啊，然后呢，我想把我们这个要用到的一些资源啊，把它上传到啊我们这个服务器里面啊。好，那我们打开这个。
<span class="token function">ftp</span> 啊xr <span class="token function">ftp</span> 连接一下。
好，连接好了以后呢，找到linux 啊，这里面我们刷新一下，好像还没有这个呃，零三是吧，呃，没有零四的是吧，那我们看一下在这里面呢，我们其实已经创建出来了，是吧？
创建出来我们保存一下。
啊，或者说我们在这呢看看有没有什么刷新的啊，刷新一下啊，刷新一下。然后我们再来看这样有没有。
这也刷新下啊，也没有是吧啊，没有的话呢，我们呃简单一些啊，注意看我是创建在哪了，是不是创建在这个lesson 零三下来是吧？所以说他。
找不到啊，我们把这个删了。
好，我们点击这个最上面的这个啊linux 啊，然后点击新建文件夹啊，但是好像他还是创建在这个目录下，是吧？
好，那我们不管了，我们自己去创建好吧，我们就通过这个xx 啊，然后make the。
lesson. 
零四。
啊，查看一下是不是创建出来了。好，然后呢我们再通过这个x <span class="token function">ftp</span> 啊，在这我刷新一下是不是有了。好，然后呢我们这个资料啊在照。
切换到这个目录下啊。
好，那我们首先呢把这个c alt 和这个library 啊这两个目录啊啊拷贝进去啊，先拷贝进去，一会儿呢给大家去说这两个是干嘛用的啊。
好，然后呢，在这儿呢我们。
<span class="token builtin class-name">let</span> s 零四是不是就有了，对吧？好，然后呢我们来看一下啊，就是这个c a l c 呢啊比如说呢我们自己啊开发了一套这个程序啊或者一套工具。
专门呢是做这个算术运算的，对吧？比如说我写了一个什么呢？写了一个艾特点c 啊，专门做这个加法的对吧？啊，div 一点c 就是做除法。
然后呢，还有这个啊marty 就是惩罚啊，sub 就是减法是吧？里面呢都有对应的这个呃函数在里面啊，这是我们写的一套这个程序是吧？
好，然后这个面里面呢是对它呢进行一个测试啊，这个非常好理解吗？对不对？那么接下来呢大家来看一下啊，我现在呢我想把我开发的这个功能啊，比如说爱的点c 一。
九八点c 麻利点c sub 点c 干嘛呢？打成一个静态库是吧？产生一个静态库供别人去使用，对吧？那我们应该怎么去做呢？
再来看一下我们打开我们的这个xxl。
啊，然后我们进入到lesson 零四。
好，呃，我们首先呢用的是这个c n lc 啊，进入到ce lc 这个目录下。
大家看是不是有这么一些文件嘛，对吧？或者呢我们用这个去指令啊，这个tree 就是查看这个文件的一个目录树啊，就是文件强安全文件夹的一个目录树。
啊，tree, 那如果说啊有的同学啊，他打这个tree 啊，如果说不能执行的话，你需要去安装一下，就是速度。apt <span class="token keyword">in</span> store. 
啊，去。
啊，然后输入密码，他就会去安装啊。好，那我知道了，已经安装好了，去，还有这么一些这个文件啊。那接下来我们要去对他进行一个这个呃制作啊。
那首先呢这个命名啊匿名的话呢，我们说是以这个iib 开头，然后叉叉叉是它的一个库的名称。比如说我们叫c a l c。
就是计算嘛，对吧？crc 这个库，然后呢点a 是不是后缀啊，是吧？好，然后呢我们第一步呢要生成这些文件的。
什么呀？他的一个啊这个点o 啊，那我们用gcc 杠c 对吧？也就是说我们只进行一个汇编，不去链接他啊。
然后呢是艾特点c 啊d y 点c 啊，然后呢这个market 点c 还有sub 点c 回车啊，然后呢我们lx 看一下。
啊，或者说去看一下，大家看是不是生成了对应的点o 文件，对吧？艾特点odey 一点，然后还有这个market market 点o 还有sub 点o。
啊，为了这个呃h 的头文件啊，咱们不需要啊不需要达成这个点o 文件，对吧？因为他在这个操作的时候呢啊预编译的时候呢，是不是直接会。
啊，包含到我们这个文件里面去啊，原文件里面去啊，对不对啊，他会做这个预处理啊，所以说头文件呢不需要啊。然后这个面典型的是我们的这个测试的一个代码，也不需要。
啊，好，那现在呢有了这些点o 文件了，接下来就是干嘛了，是不是创建这个啊静态库是吧？用这个a r 指令啊，然后加上这个参数rcs。
好，那我们来操作一下啊。
首先呢是这个a r 对吧？然后呢rcs。
好，那么接着呢，后面是跟上尼奥啊打包的啊，或者说制作这个静态库所需要的一些点和文件啊，其实这些点o 文件是不是都是一些这个目标代码呀？
对吧，它里面都是这些二进制的一些代码啊，就是这些一零一零的这个机器代码。好，然后呢我们写一下啊，比如说有这个爱德点。
哦，sub 点o 啊，猫t 点o 还有这个divide 点o 啊，然后呢注意了，我们前面还要加上什么？
加上这个库它的一个名称吧。lib c llc 啊，然后呢点a 啊不错。
然后l s 看一下啊。
或者说去。
大家看是不是生成了一个ai d 啊，c a ltda 啊，这个就是我们的一个静态库啊。好，那么静态库的制作呢非常简单。

</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br><span class="line-number">36</span><br><span class="line-number">37</span><br><span class="line-number">38</span><br><span class="line-number">39</span><br><span class="line-number">40</span><br><span class="line-number">41</span><br><span class="line-number">42</span><br><span class="line-number">43</span><br><span class="line-number">44</span><br><span class="line-number">45</span><br><span class="line-number">46</span><br><span class="line-number">47</span><br><span class="line-number">48</span><br><span class="line-number">49</span><br><span class="line-number">50</span><br><span class="line-number">51</span><br><span class="line-number">52</span><br><span class="line-number">53</span><br><span class="line-number">54</span><br><span class="line-number">55</span><br><span class="line-number">56</span><br><span class="line-number">57</span><br><span class="line-number">58</span><br><span class="line-number">59</span><br><span class="line-number">60</span><br><span class="line-number">61</span><br><span class="line-number">62</span><br><span class="line-number">63</span><br><span class="line-number">64</span><br><span class="line-number">65</span><br><span class="line-number">66</span><br><span class="line-number">67</span><br><span class="line-number">68</span><br><span class="line-number">69</span><br><span class="line-number">70</span><br><span class="line-number">71</span><br><span class="line-number">72</span><br><span class="line-number">73</span><br><span class="line-number">74</span><br><span class="line-number">75</span><br><span class="line-number">76</span><br><span class="line-number">77</span><br></div></div><p><img src="https://cdn.jsdelivr.net/gh/HACV/picture/img/image-20210705163345989.png" alt="image-20210705163345989"></p> <ul><li>啊，那关键的是这个静态库如何去使用啊，那如何去使用这个静态库呢？</li> <li>我们下一节课呢再给大家去介绍啊，这节课呢我们就介绍到这。</li> <li>我们下节课呢再见</li></ul> <h2 id="_2-静态库的使用"><a href="#_2-静态库的使用" class="header-anchor">#</a> 2.静态库的使用</h2> <ul><li>05</li></ul> <h2 id="_3-动态库-so的制作和使用"><a href="#_3-动态库-so的制作和使用" class="header-anchor">#</a> 3.动态库<code>.so</code>的制作和使用</h2> <ul><li>06</li></ul> <p><img src="https://cdn.jsdelivr.net/gh/HACV/picture/img/image-20210705161305095.png" alt="image-20210705161305095"></p> <ul><li>画成图</li></ul> <p><img src="https://cdn.jsdelivr.net/gh/HACV/picture/img/image-20210705163426394.png" alt="image-20210705163426394"></p> <ul><li>下面是原理</li></ul> <p><img src="https://cdn.jsdelivr.net/gh/HACV/picture/img/image-20210705161349837.png" alt="image-20210705161349837"></p> <h2 id="_4-动态库加载失败的原因"><a href="#_4-动态库加载失败的原因" class="header-anchor">#</a> 4.动态库加载失败的原因</h2> <ul><li>07</li></ul> <h2 id="_5-解决动态库加载失败的问题"><a href="#_5-解决动态库加载失败的问题" class="header-anchor">#</a> 5.解决动态库加载失败的问题</h2> <ul><li>08</li></ul> <h2 id="_6-静态库和动态库的对比"><a href="#_6-静态库和动态库的对比" class="header-anchor">#</a> 6.静态库和动态库的对比</h2> <ul><li>09</li></ul> <p><img src="https://cdn.jsdelivr.net/gh/HACV/picture/img/image-20210705163318271.png" alt="image-20210705163318271"></p> <ul><li>如果使用到了『静态库』或『动态库』，他们都是在链接阶段进行的处理：</li> <li>静态库：在程序链接阶段，会<strong>复制</strong>到可执行文件中</li> <li>动态库：不一样，它在链接的时候，它并不会把动态库中的代码打包到可执行文件当中，而是打包一些动态库的一些信息：比如说动态库的一个名称，将来我这个可执行程序运行的时候，它需要干嘛？它需要找到你这个动态库的一个文件，然后把动态库加载到内存当中，然后才能去使用动态库当中的代码。</li></ul> <blockquote><p>上面，是他们在链接阶段的区别，其实他们的区别就是来自『链接』阶段是如何去处理的。</p></blockquote> <p><img src="https://cdn.jsdelivr.net/gh/HACV/picture/img/image-20210705163345989.png" alt="image-20210705163345989"></p> <ul><li>动态库的制作过程</li></ul> <p><img src="https://cdn.jsdelivr.net/gh/HACV/picture/img/image-20210705163426394.png" alt="image-20210705163426394"></p> <ul><li>优点和缺点</li></ul> <p><img src="https://cdn.jsdelivr.net/gh/HACV/picture/img/20210705163536.png" alt="20210705163536"></p> <ul><li>动态库的</li></ul> <p><img src="https://cdn.jsdelivr.net/gh/HACV/picture/img/20210705163638.png" alt="20210705163638"></p></div> <div class="page-edit"><!----> <!----></div> <!----> </div> <!----></div></div>
    <script src="/assets/js/app.c70e21ad.js" defer></script><script src="/assets/js/111.f985889a.js" defer></script>
  </body>
</html>
